package org.springframework.security.core;

import java.io.Serializable;
import java.security.Principal;
import java.util.Collection;

import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.context.SecurityContextHolder;

/**
 * @author Dillon
 * @date 2024/6/26
 * @slogan 致敬大师 致敬未来的你
 * @desc 认证核心接口
 */
public interface Authentication extends Principal, Serializable {

	/**
	 * 获取用户的权限
	 * @return 用户的权限集合列表
	 */
	Collection<? extends GrantedAuthority> getAuthorities();

	/**
	 * 获取用户的凭证，一般来说就是密码
	 * @return 凭证对象
	 */
	Object getCredentials();

	/**
	 * 获取用户携带的详细信息，可能是当前请求之类的
	 * @return 携带详情
	 */
	Object getDetails();

	/**
	 * 获取当前用户，一般来说为用户名或者用户对象
	 * @return 当前用户
	 */
	Object getPrincipal();

	/**
	 * 当前用户是否已经认证成功
	 * @return 认证成功标志
	 */
	boolean isAuthenticated();

	/**
	 * 设置认证状态，true 标识认证成功
	 * @param isAuthenticated 是否认证成功标志
	 * @throws IllegalArgumentException 无效状态异常
	 */
	void setAuthenticated(boolean isAuthenticated) throws IllegalArgumentException;

}
